//项目打包配置文件

// 0. 导入 gulp 第三方包
const gulp = require('gulp')

// 0-1 导入 gulp-cssmin 第三方
const cssmin = require('gulp-cssmin')

// 0-2 导入 gulp-autoprefixer 第三方
const autoPrefixer = require('gulp-autoprefixer')

// 0-3 导入 gulp-uglify 第三方
const uglify = require('gulp-uglify')

// 0-3-2 导入 gulp-babel 第三方
const babel = require('gulp-babel')

// 0-4 导入 gulp-htmlmin 第三方
const htmlmin = require('gulp-htmlmin')

// 1-1. 创建打包css任务

function cssHandler(){
  return gulp
  .src('./src/css/*.css')   // 找到打包源文件
  .pipe(autoPrefixer())    // 自动添加前缀
  .pipe(cssmin())          // 进行压缩操作
  .pipe(gulp.dest('./dist/css/'))    // 把压缩好的文件放进一个新的文件夹
}

// 2-1. 创建打包 js 文件的任务
function jsHandler(){
  return gulp
    .src('./src/js/*.js')
    // .pipe(babel({ presets:[ '@babel/preset-env' ]}))  //进行ES6 转换 ES5
    .pipe(uglify())     // 进行压缩操作
    .pipe(gulp.dest('./dist/js/'))
}

// 3-1. 创建一个打包 html 文件的任务
function htmlHandler(){
  return gulp
    .src('./src/pages/*.html')
    .pipe(htmlmin({ // 进行压缩
      // 删除所有空白内容(空格和回车)
      collapseWhitespace: true,
      // 删除属性值的双引号
      removeAttributeQuotes: true,
      // 删除所有空属性
      removeEmptyAttributes: true,
      // 删除所有注释
      removeComments: true,
      // 移出 script 标签的默认 type 属性
      removeScriptTypeAttributes: true,
      // 移除 link 和 style 标签的默认 type 属性
      removeStyleLinkTypeAttributes: true,
      // 移除布尔类型属性的值
      collapseBooleanAttributes: true,
      // 压缩内嵌式 JS 代码
      minifyJS: true,
      // 压缩内嵌式 CSS 代码
      minifyCSS: true
    }))
    .pipe(gulp.dest('./dist/pages/'))
}

// 导出书写的所有任务
module.exports = {
  cssHandler,
  jsHandler,
  htmlHandler
}